OpenVPN-Adminを使ってWebインタフェースでユーザを管理してみる
まいど、大阪の市田です。
OpenVPNでVPNユーザの管理をしたい場合、デフォルトではコマンドラインから追加や削除などを行うことになりますが、ブラウザで利用できると運用が楽になります。
調べてみると「OpenVPN-Admin」というウェブインタフェースのツールがありましたので、早速試してみました。
構成
HTTPSで管理画面にアクセスしたかったので、ELBとACMを利用した構成にしました。ELB配下にはOpenVPNサーバ1台のみです。
VPNはOpenVPNサーバに直接接続します。
準備
今回は、Amazon Linux(2017.03.1)を使ってみます。
「OpenVPN-Admin」に必要なミドルウェアなどは上記のGithubのページに記載がありますので、こちらの「CentOS 7」向けの情報を元に必要なパッケージをインストールします。
$ sudo yum install openvpn httpd24 php56 php56-mysqlnd php56-pdo mysql-server unzip git wget sed
PHPは5.5以上が必要なので、今回はPHP56のパッケージを選びました。Apacheはhttpd24を選択しています。
node.js関連のパッケージは標準リポジトリに無いため、EPELレポジトリからインストールしましょう。
$ sudo yum install --enablerepo=epel nodejs npm
最後にbowerをインストールします。
$ sudo npm install -g bower
ミドルウェアの起動
ここでApacheとMySQLを起動しておきます。
$ sudo service httpd start $ sudo chkconfig httpd on $ sudo service mysqld start $ sudo chkconfig mysqld on
インストール
ここからは、READMEにある手順でOpenVPN-Adminをインストールしていきます。
(適当な作業用ディレクトリに移動して作業しています。)
$ mkdir mytemp $ cd mytemp/ $ git clone https://github.com/Chocobozzz/OpenVPN-Admin openvpn-admin $ cd openvpn-admin
インストーラ(install.sh)があるので、引数にApacheのDocumentRootと実行ユーザ名、グループを指定して実行します。
$ sudo ./install.sh /var/www/html apache apache
いくつかのセクション毎に設定内容をインタラクティブに入力する表示になるので、それぞれ入力して進めて下さい。
最初はサーバ設定です。
################## Server informations ################## Server Hostname/IP: Port [443]: MySQL root password: MySQL user name for OpenVPN-Admin (will be created): MySQL user password for OpenVPN-Admin:
設定内容は、下記を参考にして下さい。
設定項目 | 内容 |
---|---|
Server Hostname/IP | サーバホスト名またはサーバのグローバルIP (今回はElastic IPを指定しました。ここで指定したIPに対してVPN接続します。) |
Port [443] | OpenVPNが利用するポート (適宜設定して下さい。OpenVPN Adminの場合はデフォルトでTCP443です。) *1 |
MySQL root password | ローカルにインストールしたMySQLのrootパスワード |
MySQL user name for OpenVPN-Admin (will be created) | OpenVPN-Admin用のMySQLユーザ名 |
MySQL user password for OpenVPN-Admin | OpenVPN-Admin用のMySQLユーザのパスワード |
次は証明書に関する設定です。
特有の設定は無いので、適宜入力して下さい。
################## Certificates informations ################## Key size (1024, 2048 or 4096) [2048]: Root certificate expiration (in days) [3650]: Certificate expiration (in days) [3650]: Country Name (2 letter code) [US]: State or Province Name (full name) [California]: Locality Name (eg, city) [San Francisco]: Organization Name (eg, company) [Copyleft Certificate Co]: Organizational Unit Name (eg, section) [My Organizational Unit]: Email Address [[email protected]]: Common Name (eg, your name or your server's hostname) [ChangeMe]:
インストールが完了したらOpenVPNを起動しておきます。
$ sudo service openvpn start $ sudo chkconfig openvpn on
管理画面の設定
ここからはブラウザで設定していきます。
下記のURLにアクセスしてインストールの続きを行います。インストールしたフォルダ構成に読み替えてアクセスして下さい。
http://[your-installation]/index.php?installation
私の環境では下記の様になりました。
https://[hostname]/openvpn-admin/index.php?installation
下のインストール画面にある「Admin username」は先程設定したMySQLのユーザとは別のものです。ブラウザでアクセスするための管理者情報として新規に設定して下さい。
無事にインストールができたら次のページに遷移します。先程設定した管理ユーザとしてログインしましょう。
ログインすると下記のような管理画面が表示されます。まだユーザ登録が無いので「Web Admins」の登録しかありません。
ユーザ登録するには「OpenVPN Users」の横のプラス(+)ボタンをクリックします。
追加したいユーザ名とパスワードを登録します。
登録出来ました。MailやPhone、Start Date等は「Empty」の箇所をクリックすると登録できます。適宜設定して下さい。
WindowsからVPN接続してみる
コンフィグダウンロード
ここまで出来たら、先程作成した「cm-user01」ユーザでVPN接続してみたいと思います。利用するクライアント側のOSは「Windows8.1」です。
管理画面の右上にある「Configurations」をクリックしてコンフィグをダウンロードします。
ユーザ、パスワードを指定して、プルダウンからVPNクライアントのOS種別を選択して下さい。今回はWindowsを選択します。
全て指定できたら「Get configuration files」をクリックしてダウンロードしましょう。
ダウンロードしたZIPファイルを解凍すると下記のようなファイルが展開されます。
OpenVPNのクライアントアプリは「OpenVPN GUI for Windows」を利用します。インストールしていない場合は、事前に入れておきましょう。
デスクトップに作成されたショートカットから「管理者として実行」します。
タスクトレイのアイコンから「設定」をクリックして、先程ダウンロードしたコンフィグを指定します。
ログファイルの指定は適宜指定して下さい。デフォルトのままでも構いません。
AWS側のSecurity Group
インストールスクリプトの中で指定したOpenVPN用のポートに対して、VPNクライアントがアクセスできるようにSecurityGroupで許可設定を入れておきます。
今回の場合だと、TCPの1443ポートを許可しています。
「OpenVPN-Admin」をインストールするとIPマスカレードの設定が入るので、VPCのルートテーブルに「戻りの経路」を登録する必要はありません。OpenVPNサーバのプライベートIPで各サーバにアクセスすることになります。
$ sudo iptables -L -n -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 MASQUERADE all -- 10.8.0.0/24 0.0.0.0/0
接続してみる
以上で準備が整いました。接続してみます。
管理画面で作成したユーザ名とパスワードを入力します。
無事接続できました。
VPCにあるウェブサーバにプライベートIPでアクセスしてみます。ページが見えれば成功です。
VPN接続を切ると管理画面にログが表示されます。ユーザ名や接続元IP、時間などが分かるのは嬉しいですね。
アンインストール
インストーラと同じディレクトリに専用のスクリプトがあります。引数に「インストールしたディレクトリ」を指定して実行すると、そこに展開されたファイル群とMySQLのデータが削除されます。
$ sudo ./desinstall.sh /var/www/html
最後に
ユーザの追加と削除くらいしか出来ませんが、これだけで十分な場合もあるかと思います。
サポートが必要な場合や多要素認証の利用など、他にも要件があれば「OpenVPN Access Server」や「Sophos UTM」といった選択肢もあります。ベストなソリューションを選んで快適なVPNライフをお楽しみ下さい。
- OpenVPN Access ServerでリモートアクセスVPNをブラウザで簡単設定してみた(Mac OSX編) | Developers.IO
- OpenVPN Access ServerでGoogle Authenticatorを使って多要素認証(MFA認証)でSSL VPN接続してみた | Developers.IO
- Sophos UTM | 特集カテゴリー | Developers.IO
- Sophos | Developers.IO
以上です。
脚注
- yumでインストールした際のデフォルトはUDPの1194ポートです。 ↩